451381
@@ -43,6 +43,7 @@
 import java.util.regex.Pattern;
 
 import javax.jdo.JDODataStoreException;
+import javax.jdo.JDOException;
 import javax.jdo.JDOHelper;
 import javax.jdo.JDOObjectNotFoundException;
 import javax.jdo.PersistenceManager;
@@ -2431,7 +2432,20 @@
private void handleDirectSqlError(Exception ex) throws MetaException, NoSuchObje
         throw new MetaException(ex.getMessage());
       }
       if (!isInTxn) {
-        rollbackTransaction();
+        JDOException rollbackEx = null;
+        try {
+          rollbackTransaction();
+        } catch (JDOException jex) {
+          rollbackEx = jex;
+        }
+        if (rollbackEx != null) {
+          // Datanucleus propagates some pointless exceptions and rolls back in the finally.
+          if (currentTransaction != null && currentTransaction.isActive()) {
+            throw rollbackEx; // Throw if the tx wasn't rolled back.
+          }
+          LOG.info("Ignoring exception, rollback succeeded: " + rollbackEx.getMessage());
+        }
+
         start = doTrace ? System.nanoTime() : 0;
         openTransaction();
         if (table != null) {
